synapse - TCP Echo Server - obojsmerne vlakno

Otázka od: delphin@centrum.sk

4. 11. 2002 13:14

Zdravim !

Potreboval som si vytvorit komunikaciu medzi serverom a viacerymi
vzdialenymi klientmi terminalovym spojenim, pouzil som na to
Synapse. Hodil sa mi na to priklad z dema TCPEchoServer. Vsetko
to pekne funguje iba ak nie su v tejto komunikacii nejake
obmedzenia (neviem presne ake, tusim nejaky IP filtering alebo
firewall). Ide o to, ze server moze v pohode prijmat spravy, ale
odoslat uz z neho nemozem nic, chcel by som (neviem ako na to a
neviem, ci to Synapse umoznuje), ze ak sa na server z klienta
nieco posle, aby sa tym istym connect vlaknom dala poslat sprava
zo server na klienta o uspesnom prijati..Cital som niekde, ze je
mozne pouzivat taketo obojsmerne vlakna, neviem vsak ako s tym
pohnut v tejto suvislosti..
Prosim o nejake nakopnutie..
Vdaka
 

----------------------------------------------------------------
http://www.webpark.sk/novy-web.htm - Profesionálny webhosting

Odpovedá: Lukas Gebauer

4. 11. 2002 19:17

nerozumim tvemu problemu. ;-/

TCPEcho demo pouziva TCP spojeni, coz je 'virtualni obousmerny drat',
skrzeva ktery muzes posilat data obema smery jak chces.

Pokud se ti vubec podarinavazat spojeni a poslat nejaka data, pa
zcela urcite jdou ty data poslat i zpatky. Kdyby to neslo, nepovedlo
by se ti vubec pripojit!

Vzdyt uz i samotne Echo demo pouziva preci obousmerny datovy prenos..
co mu posles, tak to ti posle nazpatek.

> Potreboval som si vytvorit komunikaciu medzi serverom a viacerymi
> vzdialenymi klientmi terminalovym spojenim, pouzil som na to Synapse.
> Hodil sa mi na to priklad z dema TCPEchoServer. Vsetko to pekne
> funguje iba ak nie su v tejto komunikacii nejake obmedzenia (neviem
> presne ake, tusim nejaky IP filtering alebo firewall). Ide o to, ze
> server moze v pohode prijmat spravy, ale odoslat uz z neho nemozem
> nic, chcel by som (neviem ako na to a neviem, ci to Synapse umoznuje),
> ze ak sa na server z klienta nieco posle, aby sa tym istym connect
> vlaknom dala poslat sprava zo server na klienta o uspesnom
> prijati..Cital som niekde, ze je mozne pouzivat taketo obojsmerne
> vlakna, neviem vsak ako s tym pohnut v tejto suvislosti.. Prosim o
> nejake nakopnutie.. Vdaka


-- Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Synapse Delphi and Kylix TCP/IP Lib.

Odpovedá: delphin@centrum.sk

4. 11. 2002 19:02

..mozno som sa zle vyjadril..skusim teda este raz..

Prave na skusanie takejto odozvy som si upravil EchoSrv, v
TTCPEchoDaemon.Execute som si pri sock.bind dal ip svojho PC a
port 9191.V TTCPEchoThrd.Execute mam :

..
      repeat
        if terminated then break;
        ShowMessage(recvPacket(60000));
        if lastError<>0 then break;
        sendstring('odozva');
        if lastError<>0 then break;
      until false;
..

Potom som si spustil EchoSrv 2 krat, bind je na tu istu adresu a
port, z EchoSrv2 davam SendString, napr. aaa, EchoSrv1 mi spravne
vypise aaa. Ocakavam potom, ze by mi mal EchoSrv2 vypisat odozva,
ale nie, EchoSrv1 mi znova zobrazi message, tentokrat s prazdnym
stringom. Potom sa uz nic nedeje... neviem, kde robim chybu alebo
som to zle pochopil ??.. chcel by som dospiet k stavu, ked by mi
spominane upravy robili EchoSrv2 posle aaa, EchoSrv1 zobrazi aaa
a hned posle odozva, EchoSrv2 zobrazi odozva a hned posle
odozva.. a tak dookola..
..opisany stav je skusanie toho co si mi napisal v zmysle
obojsmerneho prenosu dat.. to, co som popisoval predtym sa mi
stava mozno mojimi nespravnymi nastaveniami..teraz ma vsak
zaujima aspon vyriesenie hore opisaneho problemu.. Je mozne to
takto pouzit??

Dik


Lukas pisal:
nerozumim tvemu problemu. ;-/

TCPEcho demo pouziva TCP spojeni, coz je 'virtualni obousmerny
drat',
skrzeva ktery muzes posilat data obema smery jak chces.

Pokud se ti vubec podarinavazat spojeni a poslat nejaka data, pa
zcela urcite jdou ty data poslat i zpatky. Kdyby to neslo,
nepovedlo
by se ti vubec pripojit!

Vzdyt uz i samotne Echo demo pouziva preci obousmerny datovy
prenos..
co mu posles, tak to ti posle nazpatek.


----------------------------------------------------------------
http://www.webpark.sk/novy-web.htm - Profesionálny webhosting

Odpovedá: Lukas Gebauer

4. 11. 2002 18:55

Ugh.. tak tahle opravdu ne! TCP komunikace je typu client-server..
tedy jeden je server a prijima spojeni. a druhy je klient, ktery se s
temi servery spojuje.

Nelze tedy se pokouset o neco takoveho, jako dva servery proti sobe.
To proste nejde, nepujde a nikdy nemohlo jit!

Bind neslouzi na navazovani spojeni, od toho je metoda Connect. Bind
nechej tak jak je (s hodnotou '0.0.0.0'), jen port dej na takovym, na
jakym chces poslouchat.

Pak z jineho programu, z toho klienta, de
Connect('ip_tveho_serveru','tvuj_port').. a pak muzes obousmerne
komunikovat se serverem.

> ..mozno som sa zle vyjadril..skusim teda este raz..
>
> Prave na skusanie takejto odozvy som si upravil EchoSrv, v
> TTCPEchoDaemon.Execute som si pri sock.bind dal ip svojho PC a
> port 9191.V TTCPEchoThrd.Execute mam :
>
> ..
> repeat
> if terminated then break;
> ShowMessage(recvPacket(60000));
> if lastError<>0 then break;
> sendstring('odozva');
> if lastError<>0 then break;
> until false;
> ..
>
> Potom som si spustil EchoSrv 2 krat, bind je na tu istu adresu a
> port, z EchoSrv2 davam SendString, napr. aaa, EchoSrv1 mi spravne


-- Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Synapse Delphi and Kylix TCP/IP Lib.

Odpovedá: delphin@centrum.sk

4. 11. 2002 18:09

.. OK, moja neznalost a chyba.. akym sposobom teda potom na
klientovi nacitam to co poslal server, v tomto pripade String
odozva..?

..z klienta poslem string takto

  SendSock := TTCPBlockSocket.Create;
  SendSock.CreateSocket;
  SendSock.connect(mojaIP,'9191');
  if SendSock.LastError<>0 then
  begin
    ShowMessage('chyba : '+SendSock.LastErrorDesc);
    exit;
  end;
  SendSock.SendString(Edit1.Text);

.. a ako nacitam odozvu??

Dik

----------------------------------------------------------------
http://www.webpark.sk/novy-web.htm - Profesionálny webhosting

Odpovedá: delphin@centrum.sk

4. 11. 2002 18:47

.. ja blbec som daval SendSock.RecvString a ten string bol bez
terminatoru, vracalo mi to potom prazdny string a ja som sa
cudoval.. sorry..dik za pomoc

----------------------------------------------------------------
http://www.webpark.sk/novy-web.htm - Profesionálny webhosting